from rest_framework import serializers

from api.models import Student, Teacher
from drf_day02 import settings


class StudentSerializer(serializers.Serializer):
    '''
    定义序列化器类: 需要每个model编写对应的序列化器类
    '''
    username = serializers.CharField()

    # 自定义字段 使用SerializerMethodFiled来完成自定义
    gender = serializers.SerializerMethodField()
    pic = serializers.SerializerMethodField()

    def get_gender(self, obj):
        print(obj)
        # gender 值是choices类型   get_字段名_display直接访问值
        print(obj.get_gender_display())
        return obj.get_gender_display()

    def get_pic(self, obj):
        print(obj.pic)
        return "%s%s%s" % ("http://127.0.0.1:8000/", settings.MEDIA_URL, str(obj.pic))


class StudentDeSerializer(serializers.Serializer):
    '''
    反序列化:
    将前端的数据进行保存到数据库
    1. 需要前端提供的字段
    2. 对字段进行安全校验
    3. 有没有字段进行额外的校验
    反序列化不需要进行自定义字段
    '''
    # 添加校验规则
    username = serializers.CharField(
        max_length=3,
        min_length=2,
        error_messages={
            "max_length": "超出长度",
            "min_length": "长度不足"
        }
    )
    password = serializers.CharField()

    # 对于对象的新增,必须重写create
    # self时序列化器对象   validated_data是数据
    def create(self, validated_data):
        return Student.objects.create(**validated_data)


class TeacherSerializer(serializers.Serializer):
    '''
    定义序列化器类: 需要每个model编写对应的序列化器类
    '''
    t_name = serializers.CharField()
    phone = serializers.IntegerField()

    # 自定义字段 使用SerializerMethodFiled来完成自定义
    gender = serializers.SerializerMethodField()
    course = serializers.SerializerMethodField()


    def get_gender(self, obj):
        print(obj)
        # gender 值是choices类型   get_字段名_display直接访问值
        print(obj.get_gender_display())
        return obj.get_gender_display()
    def get_course(self, obj):
        print(obj)
        # gender 值是choices类型   get_字段名_display直接访问值
        print(obj.get_course_display())
        return obj.get_course_display()


class TeacherDeSerializer(serializers.Serializer):
    '''
    反序列化:
    将前端的数据进行保存到数据库
    1. 需要前端提供的字段
    2. 对字段进行安全校验
    3. 有没有字段进行额外的校验
    反序列化不需要进行自定义字段
    '''
    # 添加校验规则
    t_name = serializers.CharField(
        max_length=3,
        min_length=2,
        error_messages={
            "max_length": "超出长度",
            "min_length": "长度不足"
        }
    )
    t_password = serializers.CharField()
    phone = serializers.CharField()


    # 对于对象的新增,必须重写create
    # self时序列化器对象   validated_data是数据
    def create(self, validated_data):
        return Teacher.objects.create(**validated_data)
